package com.me.study.javaCore.dynamicProxy.javassist;

import com.me.study.javaCore.dynamicProxy.PerformanceMonitor;
import javassist.util.proxy.MethodHandler;

import java.lang.reflect.Method;

/**
 * 借助 Javassist 实现增强逻辑
 */
public class JavassistAdvice implements MethodHandler {

    @Override
    public Object invoke(Object self, Method thisMethod, Method proceed, Object[] args) throws Throwable {
        // thisMethod 才是原始方法
        // proceed 是代理类的方法
        PerformanceMonitor.begin(self.getClass().getName() + '.' + proceed.getName());
        // 执行原始方法
        Object result = proceed.invoke(self, args);
        PerformanceMonitor.end();
        return result;
    }

}
